import requests

class BilnapTranslator:
    # كلاس ئۆزگەرگۈچىلىرى
    API_KEY = "YOUR_API_KEY"
    API_URL = "https://api.niutrans.com/NiuTransServer/translation"
    SOURCE_LANGS = ["ئۇيغۇرچە (Uyghur/uy)", "中文 (Chinese/zh)"]
    PLACEHOLDERS = {
        "ئۇيغۇرچە (Uyghur/uy)": {"text": "تەسۋىرلەڭ، مەسىلەن: بىر مۈشۈك", "dir": "rtl"},
        "中文 (Chinese/zh)": {"text": "输入文本描述", "dir": "ltr"}
    }
    DEFAULT_LANG = SOURCE_LANGS[0]
    
    # نود چۈشەندۈرۈشى
    DESCRIPTION = """支持单语言和两种语言同时输入/بىرلا تىلنى ياكى ئىككى تىلنى تەڭلا كىرگۈزۈپ تەرجىمە قىلىشنى  قوللايدۇ"""
    
    def __init__(self):
        pass
    
    @staticmethod
    def get_input_config(lang):
        """كىرگۈزۈش رامكىسىنىڭ تەڭشەكلىرىنى قايتۇرىدۇ"""
        return {
            "source_text": ("STRING", {
                "multiline": True,
                "placeholder": BilnapTranslator.PLACEHOLDERS[lang]["text"],
                "direction": BilnapTranslator.PLACEHOLDERS[lang]["dir"]
            }),
            "source_lang": (BilnapTranslator.SOURCE_LANGS, {
                "default": lang
            })
        }
    
    @classmethod
    def INPUT_TYPES(s):
        return {"required": s.get_input_config(s.DEFAULT_LANG)}
    
    RETURN_TYPES = ("STRING",)
    FUNCTION = "translate"
    CATEGORY = "text"
    
    def translate(self, source_text, source_lang):
        # تىل كودىنى ئايرىپ ئېلىش
        lang_code = "uy" if "uy" in source_lang else "zh"
        
        # placeholder نى يېڭىلاش
        self.__class__.INPUT_TYPES = classmethod(
            lambda s: {"required": self.__class__.get_input_config(source_lang)}
        )
        
        try:
            params = {
                "from": lang_code,
                "to": "en",
                "src_text": source_text,
                "apikey": self.API_KEY
            }
            
            response = requests.get(self.API_URL, params=params)
            response.raise_for_status()
            
            result = response.json()
            if "tgt_text" in result:
                return (result["tgt_text"],)
            else:
                return ("Translation error: " + str(result.get("error_msg", "Unknown error")),)
                
        except Exception as e:
            return (f"Translation error: {str(e)}",)

NODE_CLASS_MAPPINGS = {
    "Uyghur&Chinese2English": BilnapTranslator
}

NODE_DISPLAY_NAME_MAPPINGS = {
    "Uyghur&Chinese2English": "Uyghur&Chinese2English - Bilnap"
} 